package com.pureland.storage.properties;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;


/**
 * @projectName: pureland_cloud
 * @className: com.pureland.storage.properties.StorageProperties
 * @description: 存储配置类
 * @author: tong.li
 * @createTime: 2020/10/19 14:05
 * @version: v1.0
 * @copyright: 版权所有 李彤 © 2020
 */
@Data
@ConfigurationProperties(prefix = "pureland.storage")
public class StorageProperties {

    private final MinIO minio = new MinIO();

    /**
     * MinIO配置类
     */
    @NoArgsConstructor
    @Data
    public static class MinIO {
        /**
         * 是否启用
         */
        private Boolean enabled;
        /**
         * 对象存储服务的URL
         */
        private String endpoint = "http://127.0.0.1";

        /**
         * 对象存储端口号
         */
        private int port = 9000;

        /**
         * 是否开启安全组
         */
        private boolean secure;

        /**
         * Access key就像用户ID，可以唯一标识你的账户。
         */
        private String accessKey;

        /**
         * Secret key是你账户的密码
         */
        private String secretKey;

        /**
         * 存储区域
         */
        private String region;

        /**
         * 存储桶
         */
        private String bucket;

    }

    /**
     * 是否启用
     */
    private Boolean enabled;



    /**
     * 存储权限
     */
    private ACL acl = ACL.DEFAULT;



    @AllArgsConstructor
    public enum ACL {
        /**
         * 私有
         */
        PRIVATE("private"),

        /**
         * 公读
         */
        PUBLIC_READ("public-read"),
        /**
         * 公读写
         */
        PUBLIC_READ_WRITE("public-read-write"),

        /**
         * 默认
         */
        DEFAULT("default");

        /**
         * 存储的权限
         */
        private final String cannedAclHeader;

        public static ACL of(String cannedAclHeader) {
            for (ACL acl : values()) {
                if (acl.cannedAclHeader.equals(cannedAclHeader)) {
                    return acl;
                }
            }
            return null;
        }

    }

}
